package cn.mickey.exchange.service;


import cn.mickey.exchange.domain.model.IdleItemModel;
import cn.mickey.exchange.domain.model.MessageModel;
import cn.mickey.exchange.domain.model.UserModel;
import cn.mickey.exchange.mapper.IdleItemMapper;
import cn.mickey.exchange.mapper.MessageMapper;
import cn.mickey.exchange.mapper.UserMapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * userId建索引
 * idleId建索引
 * to_user建索引
 */
@Service
public class MessageService extends ServiceImpl<MessageMapper, MessageModel> {

    @Resource
    private UserMapper userMapper;

    @Resource
    private IdleItemMapper idleItemMapper;

    /**
     * 增加一条留言
     *
     * @param messageModel
     * @return
     */
    public boolean addMessage(MessageModel messageModel) {
        return baseMapper.insert(messageModel) == 1;
    }

    /**
     * 删除一条留言，未做用户身份验证
     *
     * @param id
     * @return
     */
    public boolean deleteMessage(Long id) {
        return baseMapper.delete(new LambdaQueryWrapper<MessageModel>().eq(MessageModel::getMessageId, id)) == 1;
    }

    /**
     * 获取一条留言
     *
     * @param MessageId
     * @return
     */
    public MessageModel getMessageById(Long MessageId) {
        return baseMapper.selectOne(new LambdaQueryWrapper<MessageModel>().eq(MessageModel::getMessageId, MessageId));
    }

    /**
     * 用过用户id或闲置id获取所有的留言信息
     *
     * @param column
     * @param id
     * @return
     */
    public List<MessageModel> getAllMessageById(SFunction<MessageModel, ?> column, Long id) {
        return baseMapper.selectList(
                new LambdaQueryWrapper<MessageModel>()
                        .eq(column, id)
                        .orderByDesc(MessageModel::getCreateTime));
    }

    /**
     * 获取一个用户收到的所有留言，未做分页查询
     * 同时查询出用户的信息和闲置的信息
     * userId建索引
     *
     * @param userId
     * @return
     */
    public List<MessageModel> getAllMyMessage(Long userId) {
        List<MessageModel> mList = getAllMessageById(MessageModel::getToUser, userId);
        for (MessageModel messageModel : mList) {
            UserModel fromUser = userMapper.getUserById(messageModel.getUserId());
            IdleItemModel idleItem = idleItemMapper.getIdleItemById(messageModel.getIdleId());
            messageModel.setFromU(fromUser).setIdle(idleItem);
        }
        return mList;
    }


    /**
     * 查询一个闲置下的所有留言，未做分页
     * 同时查出发送者和接收者的信息
     * idleId建索引
     *
     * @param idleId
     * @return
     */
    public List<MessageModel> getAllIdleMessage(Long idleId) {
        List<MessageModel> mList = getAllMessageById(MessageModel::getIdleId, idleId);
        for (MessageModel messageModel : mList) {
            UserModel fromUser = userMapper.getUserById(messageModel.getUserId());
            messageModel.setFromU(fromUser);
            if (messageModel.getToUser() != null && messageModel.getToMessage() != null) {
                UserModel toUSer = userMapper.getUserById(messageModel.getToUser());
                MessageModel ToMessage = getMessageById(messageModel.getToMessage());
                messageModel.setToM(ToMessage).setToU(toUSer);
            }
        }
        return mList;
    }
}
